pygame 快速入门

目标

  1. 项目准备
  2. 使用 pygame 创建图形窗口
  3. 理解 图像 并实现图像绘制
  4. 理解 游戏循环游戏时钟
  5. 理解 精灵精灵组

项目准备

  1. 新建 飞机大战 项目
  2. 新建一个 hm_01_pygame入门.py
  3. 导入 游戏素材图片

游戏的第一印象

01. 使用 pygame 创建图形窗口

小节目标

  1. 游戏的初始化和退出
  2. 理解游戏中的坐标系
  3. 创建游戏主窗口
  4. 简单的游戏循环

可以将图片素材 绘制游戏的窗口 上,开发游戏之前需要先知道 如何建立游戏窗口

1.1 游戏的初始化和退出

方法说明
pygame.init()导入并初始化所有 pygame 模块,使用其他模块之前,必须先调用 init 方法
pygame.quit()卸载所有 pygame 模块,在游戏结束之前调用!

001_pygame的init和quit-w254

 

1.2 理解游戏中的坐标系

002_游戏窗口和坐标系-w300

 

003_pygame.Rect-w382

提示

案例演练

需求

  1. 定义 hero_rect 矩形描述 英雄的位置和大小
  2. 输出英雄的 坐标原点xy
  3. 输出英雄的 尺寸宽度高度
 

1.3 创建游戏主窗口

方法说明
pygame.display.set_mode()初始化游戏显示窗口
pygame.display.update()刷新屏幕内容显示,稍后使用

set_mode 方法

 
 

1.4 简单的游戏循环

 

02. 理解 图像 并实现图像绘制

004_加载和显示图像-w841

提示:要想在屏幕上看到绘制的结果,就一定要调用 pygame.display.update() 方法

代码演练 I —— 绘制背景图像

需求

  1. 加载 background.png 创建背景
  2. 背景 绘制在屏幕的 (0, 0) 位置
  3. 调用屏幕更新显示背景图像
 

代码演练 II —— 绘制英雄图像

需求

  1. 加载 me1.png 创建英雄飞机
  2. 英雄飞机 绘制在屏幕的 (200, 500) 位置
  3. 调用屏幕更新显示飞机图像
 

透明图像

理解 update() 方法的作用

可以在 screen 对象完成 所有 blit 方法之后,统一调用一次 display.update 方法,同样可以在屏幕上 看到最终的绘制结果

案例调整

 

03. 理解 游戏循环游戏时钟

现在 英雄飞机 已经被绘制到屏幕上了,怎么能够让飞机移动呢

3.1 游戏中的动画实现原理

手翻书动画 猫惊讶

3.2 游戏循环

游戏的两个组成部分

游戏循环的开始 就意味着 游戏的正式开始

005_游戏主模块-w600

游戏循环的作用

  1. 保证游戏 不会直接退出

  2. 变化图像位置 —— 动画效果

    • 每隔 1 / 60 秒 移动一下所有图像的位置
    • 调用 pygame.display.update() 更新屏幕显示
  3. 检测用户交互 —— 按键、鼠标等...

3.3 游戏时钟

 

3.4 英雄的简单动画实现

需求

  1. 游戏初始化 定义一个 pygame.Rect 的变量记录英雄的初始位置
  2. 游戏循环 中每次让 英雄y - 1 —— 向上移动
  3. y <= 0 将英雄移动到屏幕的底部

提示:

 

作业

  1. 英雄向上飞行,当 英雄完全从上方飞出屏幕后
  2. 将飞机移动到屏幕的底部
 

提示

 

3.5 在游戏循环中 监听 事件

事件 event

监听

只有 捕获 到用户具体的操作,才能有针对性的做出响应

代码实现

 

04. 理解 精灵精灵组

4.1 精灵 和 精灵组

006_pygame.Sprite

精灵

精灵组

 

注意:仍然需要调用 pygame.display.update() 才能在屏幕看到最终结果

4.2 派生精灵子类

  1. 新建 plane_sprites.py 文件
  2. 定义 GameSprite 继承自 pygame.sprite.Sprite

注意

007_GameSprite-w398

属性

方法

提示

 

4.3 使用 游戏精灵 和 精灵组 创建敌机

需求

步骤

  1. 使用 from 导入 plane_sprites 模块

    • from 导入的模块可以 直接使用
    • import 导入的模块需要通过 模块名. 来使用
  2. 游戏初始化 创建 精灵对象精灵组对象

  3. 游戏循环中精灵组 分别调用 update()draw(screen) 方法

职责

实现步骤